import http from '../utils/request';
import { useAuthStore } from '../store/auth';

// 应用配置API前缀
const APP_CONFIG_PREFIX = '[AppConfig]';

// 应用类型枚举
export enum AppType {
  BROWSER_EXTENSION = 'browser_extension',
  WEB_APP = 'web_app',
  MOBILE_APP = 'mobile_app',
  SCRIPT = 'script',
  OTHER = 'other',
}

// 应用配置类型
export interface AppConfig {
  id?: number | string;
  name: string;
  type: AppType;
  selector?: string;
  messages: Array<{
    role: string;
    content: string;
  }>;
  extraConfig?: Record<string, any>;
  description?: string;
  isEnabled: boolean;
  isDefault: boolean;
  createdAt?: Date;
  updatedAt?: Date;
}

/**
 * 应用配置API
 */
export const appConfigApi = {
  /**
   * 获取应用配置列表
   * @returns {Promise} - HTTP GET请求的Promise对象
   */
  getList: () => {
    // 从auth store获取当前token
    const authStore = useAuthStore();
    const token = authStore.getCurrentToken;
    console.log(`${APP_CONFIG_PREFIX} API 获取配置列表，当前token:`, token);
    
    return http.get('/app-config', {}, false, true);
  },
  
  /**
   * 获取应用配置详情
   * @param {number|string} id - 配置ID
   * @returns {Promise} - HTTP GET请求的Promise对象
   */
  getDetail: (id: number | string) => {
    console.log(`${APP_CONFIG_PREFIX} API 获取配置详情:`, id);
    return http.get(`/app-config/${id}`, {}, false, true);
  },
  
  /**
   * 根据名称搜索应用配置
   * @param {string} name - 配置名称
   * @returns {Promise} - HTTP GET请求的Promise对象
   */
  findByName: (name: string) => {
    console.log(`${APP_CONFIG_PREFIX} API 根据名称搜索配置:`, name);
    return http.get('/app-config/search/name', { name }, false, true);
  },
  
  /**
   * 获取默认应用配置
   * @returns {Promise} - HTTP GET请求的Promise对象
   */
  getDefault: () => {
    console.log(`${APP_CONFIG_PREFIX} API 获取默认配置`);
    return http.get('/app-config/default', {}, false, true);
  },
  
  /**
   * 创建应用配置
   * @param {AppConfig} data - 配置信息
   * @returns {Promise} - HTTP POST请求的Promise对象
   */
  create: (data: AppConfig) => {
    console.log(`${APP_CONFIG_PREFIX} API 创建配置`);
    return http.post('/app-config', data, false, true, true);
  },
  
  /**
   * 更新应用配置
   * @param {number|string} id - 配置ID
   * @param {AppConfig} data - 配置信息
   * @returns {Promise} - HTTP PUT请求的Promise对象
   */
  update: (id: number | string, data: AppConfig) => {
    console.log(`${APP_CONFIG_PREFIX} API 发送更新请求: ID=${id}`);
    // 创建一个不包含id字段的新对象，避免后端处理问题
    const { id: _, ...updateData } = data;
    return http.put(`/app-config/${id}`, updateData, false, true);
  },
  
  /**
   * 删除应用配置
   * @param {number|string} id - 配置ID
   * @returns {Promise} - HTTP DELETE请求的Promise对象
   */
  delete: (id: number | string) => {
    console.log(`${APP_CONFIG_PREFIX} API 删除配置:`, id);
    return http.delete(`/app-config/${id}`, {}, false, true);
  },
  
  /**
   * 设置默认配置
   * @param {number|string} id - 配置ID
   * @returns {Promise} - HTTP PUT请求的Promise对象
   */
  setDefault: (id: number | string) => {
    console.log(`${APP_CONFIG_PREFIX} API 设置默认配置:`, id);
    return http.put(`/app-config/${id}/default`, {}, false, true);
  },
  
  /**
   * 修改配置启用状态
   * @param {number|string} id - 配置ID
   * @param {boolean} isEnabled - 是否启用
   * @returns {Promise} - HTTP PUT请求的Promise对象
   */
  changeStatus: (id: number | string, isEnabled: boolean) => {
    console.log(`${APP_CONFIG_PREFIX} API 修改配置状态: ID=${id}, 启用=${isEnabled}`);
    return http.put(`/app-config/${id}/status`, { isEnabled }, false, true);
  }
}; 